From a03e33b10b5989ce8644f234a1564e73a42e1e59 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 28 Jan 2011 19:34:36 +0100 Subject: [PATCH] Parse the gtk-keys.css file in the GtkSettings::gtk-key-theme-name theme path --- gtk/gtksettings.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index ee9c3361ab..221629e30b 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -225,6 +225,7 @@ static gboolean settings_update_fontconfig (GtkSettings *setting #endif static void settings_update_color_scheme (GtkSettings *settings); static void settings_update_theme (GtkSettings *settings); +static void settings_update_key_theme (GtkSettings *settings); static void merge_color_scheme (GtkSettings *settings, const GValue *value, @@ -1426,6 +1427,7 @@ settings_init_style (GtkSettings *settings) GTK_STYLE_PROVIDER_PRIORITY_SETTINGS); settings_update_theme (settings); + settings_update_key_theme (settings); } /** @@ -1608,8 +1610,11 @@ gtk_settings_notify (GObject *object, settings_update_color_scheme (settings); gtk_style_context_reset_widgets (priv->screen); break; - case PROP_APPLICATION_PREFER_DARK_THEME: + case PROP_KEY_THEME_NAME: + settings_update_key_theme (settings); + break; case PROP_THEME_NAME: + case PROP_APPLICATION_PREFER_DARK_THEME: settings_update_theme (settings); break; #ifdef GDK_WINDOWING_X11 @@ -2735,6 +2740,47 @@ settings_update_theme (GtkSettings *settings) g_free (theme_name); } +static void +settings_update_key_theme (GtkSettings *settings) +{ + static GQuark quark_key_theme_name = 0; + GtkSettingsPrivate *priv = settings->priv; + GtkCssProvider *provider, *new_provider = NULL; + gchar *key_theme_name; + + if (G_UNLIKELY (!quark_key_theme_name)) + quark_key_theme_name = g_quark_from_static_string ("gtk-settings-key-theme-name"); + + provider = g_object_get_qdata (G_OBJECT (settings), quark_key_theme_name); + + g_object_get (settings, + "gtk-key-theme-name", &key_theme_name, + NULL); + + if (key_theme_name && *key_theme_name) + new_provider = gtk_css_provider_get_named (key_theme_name, "keys"); + + if (new_provider != provider) + { + if (provider) + gtk_style_context_remove_provider_for_screen (priv->screen, + GTK_STYLE_PROVIDER (provider)); + + if (new_provider) + { + gtk_style_context_add_provider_for_screen (priv->screen, + GTK_STYLE_PROVIDER (new_provider), + GTK_STYLE_PROVIDER_PRIORITY_THEME); + g_object_ref (new_provider); + } + + g_object_set_qdata_full (G_OBJECT (settings), quark_key_theme_name, + new_provider, (GDestroyNotify) g_object_unref); + } + + g_free (key_theme_name); +} + static gboolean add_color_to_hash (gchar *name, GdkColor *color, -- 2.30.2